﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Xml.Linq;
using System.Data.Linq.SqlClient;
using DataLayer.dbml;
using DataLayer.Utilities;


namespace DataLayer.Controller
{
    /// <summary>
    /// Clase responsable del manejo de los proveedores
    /// </summary>
    public class ProviderController : GenericController<PSE_CREDITO_PM, DataClassesDataContext>
    {
        /// <summary>
        /// Estado de cuenta del proveedor
        /// </summary>
        /// <param name="nit"></param>
        /// <returns></returns>
        public static DataTable GetPSECredito(string nit)
        {
            var q = from r in DataContext.PSE_CREDITO_PM
                    where r.NIT_CEDULA == nit && r.SALDO_FACTURA > 0
                    select new
                    {
                        NUMERO_FACTURA = r.NUMERO_FACTURA,
                        NUMERO_FACTURA2 = r.NUMERO_FACTURA,
                        FECHA_FACTURA = r.FECHA_FACTURA,
                        FECHA_VENCIMIENTO = r.FECHA_VENCIMIENTO,
                        SUBTOTAL_FACTURA = r.SUBTOTAL_FACTURA,
                        VALOR_TOTAL_FACTURA = r.VALOR_TOTAL_FACTURA,
                        SALDO_FACTURA = r.SALDO_FACTURA,
                    };

            return ConvertData.ToDataTable(q);

        }

        /// <summary>
        /// Historial de pagos del proveedor
        /// </summary>
        /// <param name="nit"></param>
        /// <returns></returns>
        public static DataTable GetHistory(string nit)
        {
            var q = from p in DataContext.PSE_CREDITO_PM
                    join d in DataContext.DOC_SOP on p.NUMERO_FACTURA equals d.NUMERO_FACTURA
                    where p.NIT_CEDULA == nit && p.SALDO_FACTURA <= 0
                    orderby d.NUMERO_DOCUMENTO
                    select new 
                    { 
                        numero_factura = p.NUMERO_FACTURA,
                        numero_factura2 = p.NUMERO_FACTURA,
                        fecha_factura = p.FECHA_FACTURA, 
                        valor_factura = p.VALOR_TOTAL_FACTURA, 
                        tipo_documento = d.TIPO_DOCUMENTO, 
                        numero_documento = d.NUMERO_DOCUMENTO,
                        numero_documento2 = d.NUMERO_DOCUMENTO, 
                        fecha_documento = d.FECHA_PAGO, 
                        valor_documento = d.VALOR_DOCUMENTO, 
                        fecha_pago = d.FECHA_FACTURA 
                    };

            return ConvertData.ToDataTable(q);
        }

        /// <summary>
        /// retorna true si el nit existe en la tabla PROVEEDOR
        /// </summary>
        /// <param name="nit"></param>
        /// <returns></returns>
        public static bool IsProveedor(string nit)
        {
            List<PROVEEDOR> lista = (from p in DataContext.PROVEEDOR
                                     select p).ToList();

            //recorre la lista y quita puntos de los nit y guiones, etc
            string nitProveedor = "";
            bool existe = false;
            foreach (PROVEEDOR item in lista)
            {
                nitProveedor = item.NIT.Replace(".", "");

                if (nitProveedor.Contains("-"))                
                    nitProveedor = nitProveedor.Substring(0, nitProveedor.IndexOf("-"));

                nitProveedor = nitProveedor.Replace("-", "");

                if (nitProveedor.Equals(nit))
                    existe = true;
            }

            return existe;
        }

        public static string getIdProveedor(string nit)
        {
            List<PROVEEDOR> lista = (from p in DataContext.PROVEEDOR
                                     select p).ToList();

            //recorre la lista y quita puntos de los nit y guiones, etc
            string nitProveedor = "";
            string idProveedor = "";            
            foreach (PROVEEDOR item in lista)
            {
                nitProveedor = item.NIT.Replace(".", "");
                nit = nit.Replace(".", "");                

                if (nitProveedor.Contains("-"))
                    nitProveedor = nitProveedor.Substring(0, nitProveedor.IndexOf("-"));

                if (nit.Contains("-"))
                    nit = nit.Substring(0, nit.IndexOf("-"));

                nitProveedor = nitProveedor.Replace("-", "");
                nit = nit.Replace("-", "");

                if (nitProveedor.Equals(nit))
                    idProveedor = item.ID_PROVEEDOR;
            }

            return idProveedor;
        }
    }
}
